#include "StdAfx.h"
#include <stdio.h>
#include "CObj.h"

CObj::CObj(void)
{
	contSubObjetos = subObjetoActual = 0;
	materialActual = "algunacadenaabsurdaquedicequeaunnosehacargadonada";
}

CObj::~CObj(void)
{
}

void CObj::loadFile(char* pFilename)
{
	FILE* pFile;
	fopen_s(&pFile, pFilename, "r"); //abre el archivo en solo lectura
	if(pFile != 0)
	{//si se ha abierto el fichero correctamente
		char line[LINE_LENGHT];
		printf("CObj: inicio");
int numlineas = 0;
		while(!feof(pFile))
		{//leer linea
			fgets(line, LINE_LENGHT,pFile); //lee una linea y la guarda en line
			interpret(line); //envia la linea leida al interprete
			numlineas++;
		}
		printf("CObj: %d",numlineas);
	}
	else printf("CObj: error");
}

void CObj::interpret(char* line)
{	

	float out_x,out_y,out_z = 0.0;
	char primerCaracter = line[0];
	if(primerCaracter != '#') //no carga los comentarios
	{
		char* words[10]; //array de strings que contendra las partes de la linea

		char* pch; //auxiliar
	//	printf ("CObj: Splitting string \"%s\" into tokens:\n",line);
		pch = strtok (line," ");

		//guarda las partes de la linea en el array
		int cont = 0;
		while (pch != NULL)
		{
			words[cont] = pch;
			pch = strtok (NULL, " ");
			cont++;
		}
		//array de tokens completo
		
		int numElementos = cont -1;
		
		if(strcmp(words[0],"v")==0)
		{
			subObjetos[subObjetoActual]->addV(words,numElementos);
		}
		else if(strcmp(words[0],"vn")==0)
		{
			subObjetos[subObjetoActual]->addN(words,numElementos);
		}
		else if(strcmp(words[0],"vt")==0)
		{
			subObjetos[subObjetoActual]->addT(words,numElementos);
		}
		else if(strcmp(words[0],"f")==0)
		{
			for ( int i = 1; i <= numElementos; i++ )
			{
				char* pch; //auxiliar
				pch = strtok (words[i],"/");
				while(pch != NULL) // words[0][1]; words[0][2]
				{
					pch = strtok (NULL, "/");
				}
				subObjetos[subObjetoActual]->addF(words,numElementos);
			}
		}
		else if(strcmp(words[0],"g")==0)
		{
			subObjetoActual = contSubObjetos;
			contSubObjetos++;
			subObjetos[subObjetoActual] = new CSubObj(words[1]);
		}
		else if(strcmp(words[0],"mtllib")==0)
		{
			//cargar marerial.loadfile
		}
		else if(strcmp(words[0],"usemtl")==0)
		{
			 subObjetos[subObjetoActual]->setMaterial(words[1]);
		}


		////muestra el contenido del array
		//for (int i=0;i<cont;i++)
		//{
		//	if(words[i] != "")
		//	{
		//		pch = words[i];
		//		printf("%s\n",pch);
		//	}
		//}
		
	}
}

void CObj::crearObjeto(char* pNombre, float x, float y, float z)
{
	
}

void CObj::crearSubObjeto(char* pNombre)
{
	
}